home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d897.lha / PrtSc / Source / PrtSc.s
Text File  |  1993-06-23  |  5KB  |  252 lines

  1. ; PrintScreen V1.08
  2. ; (c) 1993 by Jan Hagqvist
  3.  
  4. ; Utilizies the PrtSc-key and makes it to
  5. ; create a graphics dump to the printer
  6.  
  7.   XREF _LVOOpenLibrary
  8.   XREF _LVOCloseLibrary
  9.   XREF _LVOOpenDevice
  10.   XREF _LVOCloseDevice
  11.   XREF _LVODisplayAlert
  12.   XREF _LVOCreateMsgPort
  13.   XREF _LVODeleteMsgPort
  14.   XREF _LVOCreateIORequest
  15.   XREF _LVODeleteIORequest
  16.   XREF _LVOSetRGB4
  17.   XREF _LVOGetVPModeID
  18.   XREF _LVODoIO
  19.   XREF _LVODisplayBeep
  20.   XREF _LVODelay
  21.  
  22.  
  23. PrtSc
  24.   move.l  4,a6
  25.   moveq.l #0,d0
  26.   lea     IntuitionName(pc),a1
  27.   jsr     _LVOOpenLibrary(a6)
  28.   move.l  d0,IntuitionBase
  29.   cmp.l   #0,d0
  30.   beq     Quit
  31.   moveq.l #36,d0
  32.   lea     GfxName(pc),a1
  33.   jsr     _LVOOpenLibrary(a6)
  34.   move.l  d0,GfxBase
  35.   cmp.l   #0,d0
  36.   beq     NoGfx36
  37.   moveq.l #0,d0
  38.   lea     DosName(pc),a1
  39.   jsr     _LVOOpenLibrary(a6)
  40.   move.l  d0,DosBase
  41.   cmp.l   #0,d0
  42.   beq     NoDos
  43.  
  44.   jsr     _LVOCreateMsgPort(a6)
  45.   move.l  d0,MsgPort
  46.   cmp.l   #0,d0
  47.   beq     NoMsgPort
  48.   move.l  d0,a0
  49.   move.l  #62,d0
  50.   jsr     _LVOCreateIORequest(a6)        ; IODRPReq
  51.   move.l  d0,Request
  52.   cmp.l   #0,d0
  53.   beq     NoRequest
  54.  
  55.   jsr     _LVOCreateMsgPort(a6)
  56.   move.l  d0,MsgPort2
  57.   cmp.l   #0,d0
  58.   beq     NoMsgPort
  59.   move.l  d0,a0
  60.   move.l  #48,d0
  61.   jsr     _LVOCreateIORequest(a6)        ; IOStdReq
  62.   move.l  d0,Request2
  63.   cmp.l   #0,d0
  64.   beq     NoRequest
  65.  
  66.   lea     KeyboardName(pc),a0
  67.   move.l  Request2(pc),a1
  68.   moveq.l #0,d0                ; unit 0
  69.   moveq.l #0,d1
  70.   jsr     _LVOOpenDevice(a6)
  71.   cmp.l   #0,d0
  72.   bne     Quit
  73.  
  74. GetKey
  75.   move.l  DosBase(pc),a6
  76.   moveq.l #5,d1
  77.   jsr     _LVODelay(a6)
  78.   move.l  4,a6
  79.   move.l  Request2(pc),a5
  80.   lea     KeyMatrix(pc),a0
  81.   move.l  a0,40(a5)
  82.   move.l  #16,36(a5)
  83.   move.w  #$a,28(a5)
  84.   move.l  a5,a1
  85.   jsr     _LVODoIO(a6)
  86.   lea     KeyMatrix(pc),a0
  87.   moveq.l #0,d0
  88.   moveq.l #0,d1
  89.   move.b  11(a0),d0
  90.   move.b  12(a0),d1
  91.   btst    #5,d0                ; PrtSc?
  92.   beq.s   GetKey4            ; No, maybe Ctrl-Esc?
  93.   btst    #0,d1                ; LShift?
  94.   bne.s   GetKey3            ; Yes! LShift+PrtSc
  95.   btst    #1,d1                ; RShift?
  96.   beq.s   GetKey4            ; No, maybe Ctrl-Esc?
  97. GetKey3
  98.   bsr     DoTheDump            ; Shift+PrtSc pressed
  99.   bra.s   GetKey
  100. GetKey4
  101.   moveq.l #0,d0
  102.   move.b  8(a0),d0
  103.   btst    #5,d0                ; Esc?
  104.   beq.s   GetKey            ; No, try again
  105.   btst    #3,d1                ; Ctrl?
  106.   beq.s   GetKey            ; No, try again
  107.  
  108. Quit                    ; Ctrl+Esc pressed, exit program
  109.   move.l  4,a6
  110.   move.l  DosBase(pc),a1
  111.   cmp.l   #0,a1
  112.   beq.s   Quit9
  113.   jsr     _LVOCloseLibrary(a6)
  114. Quit9
  115.   move.l  Request2(pc),a1
  116.   cmp.l   #0,a1
  117.   beq.s   Quit8
  118.   jsr     _LVOCloseDevice(a6)
  119. Quit8
  120.   move.l  Request2(pc),a0
  121.   cmp.l   #0,a0
  122.   beq.s   Quit7
  123.   jsr     _LVODeleteIORequest(a6)
  124. Quit7
  125.   move.l  MsgPort2(pc),a0
  126.   cmp.l   #0,a0
  127.   beq.s   Quit6
  128.   jsr     _LVODeleteMsgPort(a6)
  129. Quit6
  130.   move.l  Request(pc),a0
  131.   cmp.l   #0,a0
  132.   beq.s   Quit5
  133.   jsr     _LVODeleteIORequest(a6)
  134. Quit5
  135.   move.l  MsgPort(pc),a0
  136.   cmp.l   #0,a0
  137.   beq.s   Quit4
  138.   jsr     _LVODeleteMsgPort(a6)
  139. Quit4
  140.   move.l  GfxBase(pc),a1
  141.   cmp.l   #0,a1
  142.   beq.s   Quit3
  143.   jsr     _LVOCloseLibrary(a6)
  144. Quit3
  145.   move.l  IntuitionBase(pc),a1
  146.   cmp.l   #0,a1
  147.   beq.s   Quit2
  148.   jsr     _LVOCloseLibrary(a6)
  149. Quit2
  150.   moveq.l #0,d0
  151.   rts
  152.  
  153. DoTheDump
  154.   move.l  4,a6
  155.   lea     PrinterName(pc),a0
  156.   move.l  Request(pc),a1
  157.   moveq.l #0,d0                ; unit 0
  158.   moveq.l #0,d1
  159.   jsr     _LVOOpenDevice(a6)
  160.   cmp.l   #0,d0
  161.   bne     DoTheDump2
  162.  
  163.   move.l  IntuitionBase(pc),a5
  164.   move.l  56(a5),a4
  165.   move.l  a4,ActiveScreen
  166.   add.l   #44,a4
  167.   move.l  a4,ActiveVPort
  168.   add.l   #40,a4
  169.   move.l  a4,ActiveRPort
  170.   move.l  GfxBase(pc),a6
  171.   move.l  ActiveVPort(pc),a0
  172.   jsr     _LVOGetVPModeID(a6)
  173.   move.l  Request(pc),a5
  174.   move.l  d0,40(a5)            ; io_Modes
  175.   move.l  ActiveRPort(pc),32(a5)    ; io_RastPort
  176.   move.l  ActiveScreen(pc),a4
  177.   move.w  8(a4),44(a5)            ; io_ScrX
  178.   move.w  10(a4),46(a5)            ; io_ScrY
  179.   move.w  12(a4),48(a5)            ; io_ScrWidth
  180.   move.w  12(a4),d0
  181.   swap    d0
  182.   move.l  d0,52(a5)            ; io_DestCols
  183.   move.w  14(a4),50(a5)            ; io_ScrHeight
  184.   move.w  14(a4),d0
  185.   swap    d0
  186.   move.l  d0,56(a5)            ; io_DestRows
  187.   move.l  ActiveVPort(pc),a4
  188.   move.l  4(a4),36(a5)            ; io_ColorMap
  189.   move.w  #$80+$800,60(a5)        ; io_Special = ASPECT+NOFORMFEED
  190.   move.w  #$b,28(a5)            ; io_Command = PRD_DUMPRPORT
  191.  
  192.   move.l  4,a6
  193.   move.l  a5,a1
  194.   jsr     _LVODoIO(a6)
  195.  
  196.   move.l  4,a6
  197.   move.l  Request(pc),a1
  198.   cmp.l   #0,a1
  199.   beq.s   DoTheDump2
  200.   jsr     _LVOCloseDevice(a6)
  201. DoTheDump2
  202.   rts
  203.  
  204. NoDos
  205.   lea     NoDosText(pc),a0
  206.   bra.s   OpenAlert
  207.  
  208. NoRequest
  209.   lea     NoRequestText(pc),a0
  210.   bra.s   OpenAlert
  211.  
  212. NoMsgPort
  213.   lea     NoMsgPortText(pc),a0
  214.   bra.s   OpenAlert
  215.  
  216. NoGfx36
  217.   lea     NoGfx36Text(pc),a0
  218.   bra.s   OpenAlert
  219.   nop
  220.  
  221. OpenAlert
  222.   move.l  IntuitionBase(pc),a6
  223.   moveq.l #0,d0
  224.   moveq.l #24,d1
  225.   jsr     _LVODisplayAlert(a6)
  226.   bra     Quit
  227.  
  228. IntuitionBase    dc.l 0
  229. GfxBase        dc.l 0
  230. DosBase        dc.l 0
  231. MsgPort        dc.l 0
  232. Request        dc.l 0
  233. ActiveScreen    dc.l 0
  234. ActiveVPort    dc.l 0
  235. ActiveRPort    dc.l 0
  236. MsgPort2    dc.l 0
  237. Request2    dc.l 0
  238.  
  239. IntuitionName    dc.b 'intuition.library',0
  240. GfxName        dc.b 'graphics.library',0
  241. DosName        dc.b 'dos.library',0
  242. PrinterName    dc.b 'printer.device',0
  243. KeyboardName    dc.b 'keyboard.device',0
  244. NoGfx36Text    dc.b 0,170,14,'Can''t open graphics.library V36+',0,0
  245. NoDosText    dc.b 0,210,14,'Can''t open dos.library',0,0
  246. NoMsgPortText    dc.b 0,198,14,'Can''t create message port',0,0
  247. NoRequestText    dc.b 0,210,14,'Can''t create IORequest',0,0
  248. KeyMatrix    ds.b 16
  249. VersionString    dc.b '$VER: PrintScreen V1.08  Wednesday 23-Jun-93 by Jan Hagqvist',10,0
  250.  
  251.   END
  252.